অ্যান্ড্রয়েড অ্যাপে কিছু সেন্সিটিভ ডেটা বা ডিভাইসের ফিচারের অ্যাক্সেস করতে হলে রানটাইম পারমিশন ম্যানেজমেন্ট করা অত্যন্ত গুরুত্বপূর্ণ। অ্যান্ড্রয়েড ৬.০ (API লেভেল ২৩) থেকে, সেন্সিটিভ ডেটার অ্যাক্সেসের জন্য পারমিশন ইনস্টলেশনের সময় নয়, বরং রানটাইমে অ্যাপ্লিকেশনটি চালানোর সময় চাওয়া হয়।
এই টিউটোরিয়ালে আমরা রানটাইম পারমিশন ম্যানেজমেন্ট নিয়ে বিস্তারিত আলোচনা করব এবং কীভাবে এটি অ্যাপ্লিকেশনগুলোতে ব্যবহৃত হয় তা দেখাব।
১. পারমিশন ডিক্লেয়ার করা AndroidManifest.xml ফাইলে
রানটাইমে পারমিশন চাওয়ার আগে, আপনাকে প্রথমে AndroidManifest.xml ফাইলে সেই পারমিশনটি ডিক্লেয়ার করতে হবে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ ক্যামেরার অ্যাক্সেস চায়, তবে এভাবে পারমিশন ডিক্লেয়ার করতে হবে:
<uses-permission android:name="android.permission.CAMERA"/>
আপনার অ্যাপের কার্যকারিতার উপর ভিত্তি করে একাধিক পারমিশন ডিক্লেয়ার করতে পারেন, যেমন:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
২. রানটাইমে পারমিশন চেক করা
অ্যান্ড্রয়েড ৬.০ (মার্শম্যালো) থেকে, পারমিশন রানটাইমে চেক করা হয়। একটি নির্দিষ্ট পারমিশন দেওয়া আছে কিনা তা চেক করতে ContextCompat.checkSelfPermission() ব্যবহার করা হয়। যেমন, CAMERA পারমিশন চেক করতে:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
// পারমিশন দেওয়া আছে
} else {
// পারমিশন দেওয়া হয়নি
}
যদি পারমিশন না দেওয়া থাকে, তবে আপনাকে তা রানটাইমে চাওয়া প্রয়োজন।
৩. রানটাইমে পারমিশন রিকোয়েস্ট করা
যদি প্রয়োজনীয় পারমিশন না দেওয়া থাকে, তবে ActivityCompat.requestPermissions() ব্যবহার করে আপনি তা রিকোয়েস্ট করতে পারেন। এর মাধ্যমে ব্যবহারকারী একটি ডায়ালগ বক্স পাবেন, যাতে পারমিশন চাওয়া হবে।
উদাহরণস্বরূপ, CAMERA পারমিশন চাওয়ার জন্য:
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
- প্রথম আর্গুমেন্ট হচ্ছে অ্যাকটিভিটি কনটেক্সট (
thisএখানে), - দ্বিতীয় আর্গুমেন্ট হচ্ছে আপনি যেসব পারমিশন চাচ্ছেন তার একটি অ্যারে,
- তৃতীয় আর্গুমেন্ট হচ্ছে একটি রিকোয়েস্ট কোড, যা আপনি পারমিশন রেসপন্স হ্যান্ডেল করতে ব্যবহার করবেন।
৪. পারমিশন রেসপন্স হ্যান্ডেল করা
যখন ব্যবহারকারী পারমিশন রিকোয়েস্টের উত্তর দেন, তখন onRequestPermissionsResult() মেথড কল হবে। আপনাকে এই মেথডটি ওভাররাইড করে পারমিশন রেসপন্স হ্যান্ডেল করতে হবে। যেমন:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CAMERA_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// পারমিশন দেওয়া হয়েছে, ক্যামেরা অ্যাক্সেস করতে পারেন
} else {
// পারমিশন দেওয়া হয়নি, প্রয়োজনে হ্যান্ডেল করুন
Toast.makeText(this, "ক্যামেরা অ্যাক্সেসের পারমিশন অস্বীকার করা হয়েছে", Toast.LENGTH_SHORT).show();
}
}
}
requestCodeহচ্ছে সেই কোড যা আপনি পারমিশন রিকোয়েস্টের সময় দিয়েছিলেন।grantResultsহচ্ছে পারমিশন রিকোয়েস্টের ফলাফল (গ্রান্টেড অথবা ডিনায়েড)।
৫. বিশেষ পারমিশন (যেমন, লোকেশন) হ্যান্ডেল করা
কিছু পারমিশন, যেমন লোকেশন, আলাদা ভাবে হ্যান্ডেল করতে হয়। উদাহরণস্বরূপ, যদি অ্যাপকে লোকেশন পারমিশন চাওয়ার প্রয়োজন হয়, তবে আপনাকে ACCESS_FINE_LOCATION এবং ACCESS_COARSE_LOCATION উভয় পারমিশন চেক এবং রিকোয়েস্ট করতে হবে।
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// লোকেশন সম্পর্কিত ফিচার চালান
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_PERMISSION);
}
৬. রানটাইম পারমিশন ব্যবস্থাপনা - সেরা অভ্যাস
- পারমিশন কেন প্রয়োজন, তা ব্যাখ্যা করুন: সেন্সিটিভ পারমিশন রিকোয়েস্ট করার আগে ব্যবহারকারীকে কেন এটি প্রয়োজন, তা ব্যাখ্যা করা ভালো। এক্ষেত্রে, আপনি পারমিশন চাওয়ার আগে একটি ডায়ালগ বা টেক্সট প্রদর্শন করতে পারেন।
- পারমিশন ডিনায়াল হ্যান্ডেল করুন: ব্যবহারকারী যদি পারমিশন না দেন, তবে সঠিকভাবে তা হ্যান্ডেল করুন। উদাহরণস্বরূপ, আপনি তাদের জানিয়ে দিতে পারেন এবং পরবর্তীতে সেটিংস থেকে পারমিশন দেয়ার সুযোগ দিতে পারেন।
shouldShowRequestPermissionRationale()ব্যবহার করুন: যদি ব্যবহারকারী পূর্বে পারমিশন অস্বীকার করে থাকে, তাহলেshouldShowRequestPermissionRationale()ব্যবহার করে ব্যাখ্যা প্রদর্শন করুন এবং তারপরে পারমিশন চাওয়ার জন্য আবার রিকোয়েস্ট করুন:
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
// ব্যাখ্যা দেখান
new AlertDialog.Builder(this)
.setMessage("এই অ্যাপটিতে ছবি তোলার জন্য ক্যামেরা অ্যাক্সেসের প্রয়োজন।")
.setPositiveButton("OK", (dialog, which) -> {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
})
.setNegativeButton("Cancel", null)
.show();
} else {
// পারমিশন রিকোয়েস্ট করুন
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
}
৭. পারমিশন গ্রুপ
অ্যান্ড্রয়েড কিছু পারমিশন গ্রুপে শ্রেণীবদ্ধ করে দিয়েছে, যেমন ক্যামেরা, স্টোরেজ, লোকেশন ইত্যাদি। আপনি একাধিক পারমিশন একসাথে রিকোয়েস্ট করতে পারেন, তবে প্রতিটি পারমিশন এখনও আলাদাভাবে চেক এবং রিকোয়েস্ট করতে হবে।
সারাংশ
রানটাইম পারমিশন ম্যানেজমেন্ট অ্যান্ড্রয়েড অ্যাপে অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার অ্যাপ ব্যবহারকারীর সেন্সিটিভ ডেটা বা ডিভাইসের ফিচার অ্যাক্সেস করতে চায়। উপরের পদক্ষেপগুলি অনুসরণ করে আপনি সহজেই পারমিশন রিকোয়েস্ট, চেক এবং হ্যান্ডেল করতে পারবেন।
Read more